<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="tool" content="leanote-desktop-app">
<title>数字签名是什么？</title>
<style>
.tab{font-size:12px; margin-bottom: 10px;}
.tab a{cursor:pointer;cursor:pointer;display:inline-block;margin-right:10px;color:#000}#tab-html{color:#ccc}

.content-container .content-html{visibility: hidden;}
.content-container.html .content-markdown{display:none}
.content-container.html .content-html{display:block; visibility: visible;}
.content-container.html #tab-markdown{color:#ccc}
.content-container.html #tab-html{color:#000}
.content-markdown {overflow: auto;}
textarea {display: none;}

*{font-family:"lucida grande","lucida sans unicode",lucida,helvetica,"Hiragino Sans GB","Microsoft YaHei","WenQuanYi Micro Hei",sans-serif;}

body {
  margin: 0;
}

/*公用文字样式*/
h1{font-size:30px}h2{font-size:24px}h3{font-size:18px}h4{font-size:14px}
.note-container{
    width:850px; 
    margin:auto;
    padding: 10px 20px;
    box-shadow: 1px 1px 10px #eee;
}
#title {
  margin: 0;
}
table {
    margin-bottom: 16px;
    border-collapse: collapse;
}
table th, table td {
    padding: 6px 13px;
    border: 1px solid #ddd;
}
table th {
    font-weight: bold;
}

table tr {
    background-color: none;
    border-top: 1px solid #ccc;
}
table tr:nth-child(2n) {
    background-color: rgb(247, 247, 249);
}
.mce-item-table, .mce-item-table td, .mce-item-table th, .mce-item-table caption {
  border: 1px solid #ddd;
  border-collapse: collapse;
  padding: 6px 13px;
}
blockquote {
  border-left-width:10px;
  background-color:rgba(128,128,128,0.05);
  border-top-right-radius:5px;
  border-bottom-right-radius:5px;
  padding:15px 20px;
  border-left:5px solid rgba(128,128,128,0.075);
}
blockquote p {
  margin-bottom:1.1em;
  font-size:1em;
  line-height:1.45
}
blockquote ul:last-child,blockquote ol:last-child {
  margin-bottom:0
}
pre {
  padding: 18px;
  background-color: #f7f7f9;
  border: 1px solid #e1e1e8;
  border-radius: 3px;
  display: block;
}
code {
  padding: 2px 4px;
  font-size: 90%;
  color: #c7254e;
  white-space: nowrap;
  background-color: #f9f2f4;
  border-radius: 4px;
}
.footnote {
  vertical-align: top;
  position: relative;
  top: -0.5em;
  font-size: .8em;
}

hr {
  margin:2em 0
}
img {
  max-width:100%;
  display: block;
  margin: auto;
}
pre {
  word-break:break-word
}
p,pre,pre.prettyprint,blockquote {
  margin:0 0 1.1em
}
hr {
  margin:2em 0
}
img {
  max-width:100%
}
.sequence-diagram,.flow-chart {
  text-align:center;
  margin-bottom:1.1em
}
.sequence-diagram text,.flow-chart text {
  font-size:15px !important;
  font-family:"Source Sans Pro",sans-serif !important
}
.sequence-diagram [fill="#ffffff"],.flow-chart [fill="#ffffff"] {
  fill:#f6f6f6
}
.sequence-diagram [stroke="#000000"],.flow-chart [stroke="#000000"] {
  stroke:#3f3f3f
}
.sequence-diagram text[stroke="#000000"],.flow-chart text[stroke="#000000"] {
  stroke:none
}
.sequence-diagram [fill="#000"],.flow-chart [fill="#000"],.sequence-diagram [fill="#000000"],.flow-chart [fill="#000000"],.sequence-diagram [fill="black"],.flow-chart [fill="black"] {
  fill:#3f3f3f
}
ul,ol {
  margin-bottom:1.1em
}
ul ul,ol ul,ul ol,ol ol {
  margin-bottom:1.1em
}
kbd {
  padding:.1em .6em;
  border:1px solid rgba(63,63,63,0.25);
  -webkit-box-shadow:0 1px 0 rgba(63,63,63,0.25);
  box-shadow:0 1px 0 rgba(63,63,63,0.25);
  font-size:.7em;
  font-family:sans-serif;
  background-color:#fff;
  color:#333;
  border-radius:3px;
  display:inline-block;
  margin:0 .1em;
  white-space:nowrap
}
.toc ul {
  list-style-type:none;
  margin-bottom:15px
}
.m-todo-item {
  list-style: none;
}
pre code {
  padding: 0;
  color: inherit;
  white-space: pre-wrap;
  background-color: inherit;
  border-radius: 0;
}
</style>
<!-- 该css供自定义样式 -->
<link href="../leanote-markdown.css" rel="stylesheet">
</head>

<body>

	<div class="note-container">
		<h1 class="title" id="leanote-title">数字签名是什么？</h1>
		<div class="content-container html" id="content-container">
			<!-- 切换 -->
			<div class="tab"><a id="tab-markdown">Markdown</a><a id="tab-html">HTML</a></div>
			<textarea id="leanote-content-markdown">
转载自:[数字签名是什么?][1]

1.鲍勃有两把钥匙，一把是公钥，另一把是私钥。

[![clip_image001](https://pic003.cnblogs.com/2011/34358/201108/20110809222151361.gif "clip_image001")](http://pic003.cnblogs.com/2011/34358/201108/20110809222149250.gif)



2.鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。

[![clip_image002](https://pic003.cnblogs.com/2011/34358/201108/20110809222216875.gif "clip_image002")](http://pic003.cnblogs.com/2011/34358/201108/20110809222215408.gif)



3.苏珊给鲍勃写信，写完后用鲍勃的公钥加密，达到保密的效果。

[![clip_image003](https://pic003.cnblogs.com/2011/34358/201108/20110809222240612.gif "clip_image003")](http://pic003.cnblogs.com/2011/34358/201108/20110809222217341.gif)



4.鲍勃收信后，用私钥解密，看到信件内容。

[![clip_image004](https://pic003.cnblogs.com/2011/34358/201108/20110809222323591.gif "clip_image004")](http://pic003.cnblogs.com/2011/34358/201108/20110809222322909.gif)



5.鲍勃给苏珊回信，写完后用Hash函数，生成信件的摘要（digest）。

[![clip_image005](https://pic003.cnblogs.com/2011/34358/201108/20110809222326211.gif "clip_image005")](http://pic003.cnblogs.com/2011/34358/201108/20110809222324845.gif)



6.然后，鲍勃使用私钥，对这个摘要加密，生成"数字签名"（signature）。


[![clip_image006](https://pic003.cnblogs.com/2011/34358/201108/20110809222328604.gif "clip_image006")](http://pic003.cnblogs.com/2011/34358/201108/20110809222327228.gif)


7.鲍勃将这个签名，附在信件下面，一起发给苏珊。

[![clip_image007](https://pic003.cnblogs.com/2011/34358/201108/20110809222333784.gif "clip_image007")](http://pic003.cnblogs.com/2011/34358/201108/20110809222329430.gif)



8.苏珊收信后，取下数字签名，用鲍勃的公钥解密，得到信件的摘要。由此证明，这封信确实是鲍勃发出的。

[![clip_image008](https://pic003.cnblogs.com/2011/34358/201108/20110809222342939.gif "clip_image008")](http://pic003.cnblogs.com/2011/34358/201108/20110809222341117.gif)



9.`苏珊再对信件本身使用Hash函数，将得到的结果，与上一步得到的摘要进行对比。如果两者一致，就证明这封信未被修改过`。
[![clip_image009](https://pic003.cnblogs.com/2011/34358/201108/20110809222406947.gif "clip_image009")](http://pic003.cnblogs.com/2011/34358/201108/20110809222346488.gif)


10.复杂的情况出现了。道格想欺骗苏珊，他偷偷使用了苏珊的电脑，用自己的公钥换走了鲍勃的公钥。因此，他就可以冒充鲍勃，写信给苏珊。

[![clip_image010](https://pic003.cnblogs.com/2011/34358/201108/20110809222408184.gif "clip_image010")](http://pic003.cnblogs.com/2011/34358/201108/20110809222407860.gif)



11.苏珊发现，自己无法确定公钥是否真的属于鲍勃。她想到了一个办法，要求鲍勃去找"证书中心"（certificate authority，简称CA），为公钥做认证。证书中心用自己的私钥，对鲍勃的公钥和一些相关信息一起加密，生成"数字证书"（Digital Certificate）。

[![clip_image011](https://pic003.cnblogs.com/2011/34358/201108/20110809222414723.gif "clip_image011")](http://pic003.cnblogs.com/2011/34358/201108/20110809222413524.gif)



12.鲍勃拿到数字证书以后，就可以放心了。以后再给苏珊写信，只要在签名的同时，再附上数字证书就行了。


[![clip_image012](https://pic003.cnblogs.com/2011/34358/201108/20110809222438926.gif "clip_image012")](http://pic003.cnblogs.com/2011/34358/201108/20110809222419509.gif)


13.苏珊收信后，用CA的公钥解开数字证书，就可以拿到鲍勃真实的公钥了，然后就能证明"数字签名"是否真的是鲍勃签的。

[![clip_image013](https://pic003.cnblogs.com/2011/34358/201108/20110809222522961.gif "clip_image013")](http://pic003.cnblogs.com/2011/34358/201108/20110809222439609.gif)



14.下面，我们看一个应用"数字证书"的实例：https协议。这个协议主要用于网页加密。

[![clip_image014](https://pic003.cnblogs.com/2011/34358/201108/20110809222525936.jpg "clip_image014")](http://pic003.cnblogs.com/2011/34358/201108/20110809222524985.jpg)



15.首先，客户端向服务器发出加密请求。

[![clip_image015](https://pic003.cnblogs.com/2011/34358/201108/20110809222531653.gif "clip_image015")](http://pic003.cnblogs.com/2011/34358/201108/20110809222526654.gif)



16.服务器用自己的私钥加密网页以后，连同本身的数字证书，一起发送给客户端。


[![clip_image016](https://pic003.cnblogs.com/2011/34358/201108/20110809222537383.gif "clip_image016")](http://pic003.cnblogs.com/2011/34358/201108/20110809222536164.gif)


17.客户端（浏览器）的"证书管理器"，有"受信任的根证书颁发机构"列表。客户端会根据这张列表，查看解开数字证书的公钥是否在列表之内。


[![clip_image017](https://pic003.cnblogs.com/2011/34358/201108/20110809222540612.gif "clip_image017")](http://pic003.cnblogs.com/2011/34358/201108/20110809222539139.gif)


18.如果数字证书记载的网址，与你正在浏览的网址不一致，就说明这张证书可能被冒用，浏览器会发出警告。

[![clip_image018](https://pic003.cnblogs.com/2011/34358/201108/2011080922254657.gif "clip_image018")](http://pic003.cnblogs.com/2011/34358/201108/20110809222542525.gif)



19.如果这张数字证书不是由受信任的机构颁发的，浏览器会发出另一种警告。

[![clip_image019](https://pic003.cnblogs.com/2011/34358/201108/20110809222554853.jpg "clip_image019")](http://pic003.cnblogs.com/2011/34358/201108/201108092225527.jpg)



20.如果数字证书是可靠的，客户端就可以使用证书中的服务器公钥，对信息进行加密，然后与服务器交换加密信息。

[![clip_image020](https://pic003.cnblogs.com/2011/34358/201108/20110809222557915.gif "clip_image020")](http://pic003.cnblogs.com/2011/34358/201108/20110809222556463.gif)




  [1]: https://news.cnblogs.com/n/111348/#top</textarea>
			<!-- markdown -->
			<pre class="content-markdown">
转载自:[数字签名是什么?][1]

1.鲍勃有两把钥匙，一把是公钥，另一把是私钥。

[![clip_image001](https://pic003.cnblogs.com/2011/34358/201108/20110809222151361.gif "clip_image001")](http://pic003.cnblogs.com/2011/34358/201108/20110809222149250.gif)



2.鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。

[![clip_image002](https://pic003.cnblogs.com/2011/34358/201108/20110809222216875.gif "clip_image002")](http://pic003.cnblogs.com/2011/34358/201108/20110809222215408.gif)



3.苏珊给鲍勃写信，写完后用鲍勃的公钥加密，达到保密的效果。

[![clip_image003](https://pic003.cnblogs.com/2011/34358/201108/20110809222240612.gif "clip_image003")](http://pic003.cnblogs.com/2011/34358/201108/20110809222217341.gif)



4.鲍勃收信后，用私钥解密，看到信件内容。

[![clip_image004](https://pic003.cnblogs.com/2011/34358/201108/20110809222323591.gif "clip_image004")](http://pic003.cnblogs.com/2011/34358/201108/20110809222322909.gif)



5.鲍勃给苏珊回信，写完后用Hash函数，生成信件的摘要（digest）。

[![clip_image005](https://pic003.cnblogs.com/2011/34358/201108/20110809222326211.gif "clip_image005")](http://pic003.cnblogs.com/2011/34358/201108/20110809222324845.gif)



6.然后，鲍勃使用私钥，对这个摘要加密，生成"数字签名"（signature）。


[![clip_image006](https://pic003.cnblogs.com/2011/34358/201108/20110809222328604.gif "clip_image006")](http://pic003.cnblogs.com/2011/34358/201108/20110809222327228.gif)


7.鲍勃将这个签名，附在信件下面，一起发给苏珊。

[![clip_image007](https://pic003.cnblogs.com/2011/34358/201108/20110809222333784.gif "clip_image007")](http://pic003.cnblogs.com/2011/34358/201108/20110809222329430.gif)



8.苏珊收信后，取下数字签名，用鲍勃的公钥解密，得到信件的摘要。由此证明，这封信确实是鲍勃发出的。

[![clip_image008](https://pic003.cnblogs.com/2011/34358/201108/20110809222342939.gif "clip_image008")](http://pic003.cnblogs.com/2011/34358/201108/20110809222341117.gif)



9.`苏珊再对信件本身使用Hash函数，将得到的结果，与上一步得到的摘要进行对比。如果两者一致，就证明这封信未被修改过`。
[![clip_image009](https://pic003.cnblogs.com/2011/34358/201108/20110809222406947.gif "clip_image009")](http://pic003.cnblogs.com/2011/34358/201108/20110809222346488.gif)


10.复杂的情况出现了。道格想欺骗苏珊，他偷偷使用了苏珊的电脑，用自己的公钥换走了鲍勃的公钥。因此，他就可以冒充鲍勃，写信给苏珊。

[![clip_image010](https://pic003.cnblogs.com/2011/34358/201108/20110809222408184.gif "clip_image010")](http://pic003.cnblogs.com/2011/34358/201108/20110809222407860.gif)



11.苏珊发现，自己无法确定公钥是否真的属于鲍勃。她想到了一个办法，要求鲍勃去找"证书中心"（certificate authority，简称CA），为公钥做认证。证书中心用自己的私钥，对鲍勃的公钥和一些相关信息一起加密，生成"数字证书"（Digital Certificate）。

[![clip_image011](https://pic003.cnblogs.com/2011/34358/201108/20110809222414723.gif "clip_image011")](http://pic003.cnblogs.com/2011/34358/201108/20110809222413524.gif)



12.鲍勃拿到数字证书以后，就可以放心了。以后再给苏珊写信，只要在签名的同时，再附上数字证书就行了。


[![clip_image012](https://pic003.cnblogs.com/2011/34358/201108/20110809222438926.gif "clip_image012")](http://pic003.cnblogs.com/2011/34358/201108/20110809222419509.gif)


13.苏珊收信后，用CA的公钥解开数字证书，就可以拿到鲍勃真实的公钥了，然后就能证明"数字签名"是否真的是鲍勃签的。

[![clip_image013](https://pic003.cnblogs.com/2011/34358/201108/20110809222522961.gif "clip_image013")](http://pic003.cnblogs.com/2011/34358/201108/20110809222439609.gif)



14.下面，我们看一个应用"数字证书"的实例：https协议。这个协议主要用于网页加密。

[![clip_image014](https://pic003.cnblogs.com/2011/34358/201108/20110809222525936.jpg "clip_image014")](http://pic003.cnblogs.com/2011/34358/201108/20110809222524985.jpg)



15.首先，客户端向服务器发出加密请求。

[![clip_image015](https://pic003.cnblogs.com/2011/34358/201108/20110809222531653.gif "clip_image015")](http://pic003.cnblogs.com/2011/34358/201108/20110809222526654.gif)



16.服务器用自己的私钥加密网页以后，连同本身的数字证书，一起发送给客户端。


[![clip_image016](https://pic003.cnblogs.com/2011/34358/201108/20110809222537383.gif "clip_image016")](http://pic003.cnblogs.com/2011/34358/201108/20110809222536164.gif)


17.客户端（浏览器）的"证书管理器"，有"受信任的根证书颁发机构"列表。客户端会根据这张列表，查看解开数字证书的公钥是否在列表之内。


[![clip_image017](https://pic003.cnblogs.com/2011/34358/201108/20110809222540612.gif "clip_image017")](http://pic003.cnblogs.com/2011/34358/201108/20110809222539139.gif)


18.如果数字证书记载的网址，与你正在浏览的网址不一致，就说明这张证书可能被冒用，浏览器会发出警告。

[![clip_image018](https://pic003.cnblogs.com/2011/34358/201108/2011080922254657.gif "clip_image018")](http://pic003.cnblogs.com/2011/34358/201108/20110809222542525.gif)



19.如果这张数字证书不是由受信任的机构颁发的，浏览器会发出另一种警告。

[![clip_image019](https://pic003.cnblogs.com/2011/34358/201108/20110809222554853.jpg "clip_image019")](http://pic003.cnblogs.com/2011/34358/201108/201108092225527.jpg)



20.如果数字证书是可靠的，客户端就可以使用证书中的服务器公钥，对信息进行加密，然后与服务器交换加密信息。

[![clip_image020](https://pic003.cnblogs.com/2011/34358/201108/20110809222557915.gif "clip_image020")](http://pic003.cnblogs.com/2011/34358/201108/20110809222556463.gif)




  [1]: https://news.cnblogs.com/n/111348/#top</pre>
			<!-- html -->
			<div class="content-html" id="leanote-content-html"></div>
		</div>
	</div>

<!-- 该js供其它处理 -->
<script src="../leanote-markdown.js"></script>
<script src="http://leanote.github.io/markdown-to-html/markdown-to-html.min.js"></script>
<script>
function init() {
	markdownToHtml(document.getElementById('leanote-content-markdown').value, document.getElementById('leanote-content-html'), function(html) {
		// 解析后执行
		if(window.markdownParsed) {
			window.markdownParsed(html);
		}
	});
	var $m = document.getElementById('tab-markdown');
	var $h = document.getElementById('tab-html');
	var $cc = document.getElementById('content-container');
	function toggleToHtml(isToHtml) {
		$cc.className = isToHtml ? 'content-container html' : 'content-container';
	}
	$m.addEventListener('click', function() {
		toggleToHtml(false);
	});
	$h.addEventListener('click', function() {
		toggleToHtml(true);
	});
}

// 如果不要自动解析html, notParseMarkdown在leanote-markdown.js中定义
if(!window.notParseMarkdown) {
	init();
}
</script>
</body>
</html>